package com.blackcat.trycatch.service;


import org.springframework.stereotype.Service;

import java.math.BigDecimal;

/**
 * @Title 异常测试
 * @Description
 * @author zhanghui
 * @date 2020年12月08日 14:15
 * @version V1.0
 * @see
 * @since V1.0
 *
 * 下面是常见的几种异常：
 *
 * 输入输出异常：IOException
 * 算术异常类：ArithmeticExecption
 * 空指针异常类：NullPointerException
 * 类型强制转换异常：ClassCastException
 *
 * 操作数据库异常：SQLException
 *
 * 文件未找到异常：FileNotFoundException
 * 数组负下标异常：NegativeArrayException
 * 数组下标越界异常：ArrayIndexOutOfBoundsException
 * 违背安全原则异常：SecturityException
 * 文件已结束异常：EOFException
 * 字符串转换为数字异常：NumberFormatException
 * 方法未找到异常：NoSuchMethodException
 *
 */
@Service
public class TestServiceImpl implements TestService{

	@Override
	public void test1() {
		// 不做异常处理
		BigDecimal.ONE.divide(BigDecimal.ZERO);
	}

	/**
	 * <p> 描述 : 使用throws抛出
	 * 		tthrow则是将异常抛给它的上一级处理，程序便不往下执行了
	 * @author : blackcat
	 * @date  : 2020/12/8 14:27
	 */
	@Override
	public void test2() throws Exception {
		BigDecimal.ONE.divide(BigDecimal.ZERO);
	}

	/**
	 * <p> 描述 : 使用try catch
	 * 		try catch是直接处理，处理完成之后程序继续往下执行
	 * @author : blackcat
	 * @date  : 2020/12/8 14:27
	 */
	@Override
	public void test3() {

		try{
			BigDecimal.ONE.divide(BigDecimal.ZERO);
			System.out.print(0);
		}catch(Exception e){
			// 首先执行try，遇到算术异常，抛出，执行catch，打印1。
			System.out.print(1);
			// 然后抛出RuntimeException，缓存异常
			throw new  RuntimeException();
		}finally{
			// 执行finally，打印2，然后抛出RuntimeException。
			System.out.print(2);
		}
		// 如果catch中没有抛出RuntimeException，则执行结果为123。
		System.out.print(3);
	}

}
